home *** CD-ROM | disk | FTP | other *** search
/ The Programmer Disk / The Programmer Disk (Microforum).iso / xpro / c3 / pro21 / source.doc < prev    next >
Text File  |  1992-10-13  |  97KB  |  2,076 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.                                    SOURCE
  26.  
  27.  
  28.                                 Version 1.01
  29.  
  30.                               October 14, 1992
  31.  
  32.  
  33.                                  Written by
  34.  
  35.                                  Rick Maddy
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.                           SOURCE Table of Contents
  43.  
  44.      1    Distribution . . . . . . . . . . . . . . . . . . . .  Page 1
  45.  
  46.      2    What is SOURCE?  . . . . . . . . . . . . . . . . . .  Page 1
  47.  
  48.      3    Quick Start  . . . . . . . . . . . . . . . . . . . .  Page 2
  49.  
  50.      4    The SOURCE Command Line  . . . . . . . . . . . . . .  Page 3
  51.           4.1  Global Options  . . . . . . . . . . . . . . . .  Page 3
  52.           4.2  Filenames . . . . . . . . . . . . . . . . . . .  Page 4
  53.           4.3  Local Options . . . . . . . . . . . . . . . . .  Page 5
  54.           4.4  Full Command Line . . . . . . . . . . . . . . .  Page 5
  55.  
  56.      5    SOURCE Options . . . . . . . . . . . . . . . . . . .  Page 5
  57.  
  58.      6    SOURCE.CFG . . . . . . . . . . . . . . . . . . . . . Page 16
  59.           6.1  SOURCE.CFG Location . . . . . . . . . . . . . . Page 16
  60.           6.2  Named Configuration Options . . . . . . . . . . Page 16
  61.           6.3  SOURCE.CFG Format . . . . . . . . . . . . . . . Page 17
  62.           6.4  Commenting SOURCE.CFG . . . . . . . . . . . . . Page 18
  63.           6.5  Modifying SOURCE.CFG  . . . . . . . . . . . . . Page 18
  64.  
  65.      7    SOURCE.PRT . . . . . . . . . . . . . . . . . . . . . Page 18
  66.           7.1  Default Printer . . . . . . . . . . . . . . . . Page 18
  67.           7.2  SOURCE.PRT Format . . . . . . . . . . . . . . . Page 19
  68.           7.3  Modifying Your Printer  . . . . . . . . . . . . Page 23
  69.  
  70.      8    SOURCE.LNG . . . . . . . . . . . . . . . . . . . . . Page 23
  71.           8.1  SOURCE.LNG Location . . . . . . . . . . . . . . Page 23
  72.           8.2  SOURCE.LNG Format . . . . . . . . . . . . . . . Page 24
  73.           8.3  Commenting SOURCE.LNG . . . . . . . . . . . . . Page 25
  74.           8.4  Defining Language Specific Features . . . . . . Page 25
  75.                8.4.1     Comments  . . . . . . . . . . . . . . Page 25
  76.                8.4.2     String and Character Literals . . . . Page 26
  77.                8.4.3     Blocks  . . . . . . . . . . . . . . . Page 27
  78.                8.4.4     Keywords  . . . . . . . . . . . . . . Page 28
  79.                8.4.5     Complete Definition . . . . . . . . . Page 28
  80.           8.5  General Points  . . . . . . . . . . . . . . . . Page 30
  81.  
  82.      9    Network Support  . . . . . . . . . . . . . . . . . . Page 30
  83.  
  84.      10   Definition of Shareware  . . . . . . . . . . . . . . Page 31
  85.  
  86.      11   Disclaimer - Agreement For Trying SOURCE . . . . . . Page 31
  87.  
  88.      12   Registering  . . . . . . . . . . . . . . . . . . . . Page 32
  89.  
  90.      13   Future Enhancements  . . . . . . . . . . . . . . . . Page 33
  91.  
  92.      14   Acknowledgements . . . . . . . . . . . . . . . . . . Page 33
  93.  
  94.      SOURCE REGISTRATION . . . . . . . . . . . . . . . . . . . Page 34
  95.  
  96.  
  97.  
  98.  
  99.  
  100.                                    Page i
  101.                                    SOURCE
  102.  
  103.      SOURCE Version 1.01 - Source code file printing utility
  104.      Copyright 1992 Rick Maddy
  105.  
  106.      1    Distribution
  107.  
  108.      The SOURCE program is made up of these files:
  109.  
  110.           SOURCE.EXE     The SOURCE program file.
  111.           SOURCE.DOC     This documentation file.
  112.           SOURCE.PRT     The default printer definition file.
  113.           SOURCE.CFG     The default configuration option file.
  114.           SOURCE.LNG     The default language definition file.
  115.           README.1ST     Quick summary and last minute notes.
  116.           REGISTER.TXT   Order form to register SOURCE.
  117.  
  118.      This unregistered shareware program is distributed in the PKZIP
  119.      format.  SOURCE.ZIP may be passed onto as many people as you
  120.      like, provided it remains intact, ALL files are kept together,
  121.      and only the original files are distributed.  DO NOT zip up and
  122.      pass on your modified files.  See section 10 below for further
  123.      information on shareware.
  124.  
  125.      2    What is SOURCE?
  126.  
  127.      SOURCE, in its most basic form, is a program for printing source
  128.      code and text files.  However, using SOURCE to its fullest
  129.      potential gives you an extremely powerful and flexible program
  130.      for printing source code and allows for numerous options for
  131.      formatting the output:
  132.  
  133.           - Custom page sizing
  134.           - Adjustable margins
  135.           - Page orientation (portrait or landscape) 
  136.           - Character pitch (pica, elite, or compressed)
  137.           - Number of columns per page
  138.           - User definable page header/footers
  139.           - Optional banner page before/after files
  140.           - Output may be redirected to any device or file
  141.           - Printing ranges may be specified, including starting
  142.             and/or ending line or page numbers
  143.           - Multiple files can be queued for printing   
  144.  
  145.      In addition to these basic printing options, SOURCE contains many
  146.      options specifically geared toward formatting source code (such
  147.      as C, Pascal, Fortran, dBase, or whatever you code in).  These
  148.      include:
  149.  
  150.           - User definable line and page numbering
  151.           - Comments in the source code may be printed as bold,
  152.             italic, or underlined  
  153.           - Keywords may be highlighted
  154.           - Code blocks grouped graphically
  155.           - Adjustable tab sizes for printing
  156.           - Configurable language support
  157.  
  158.  
  159.                                    Page 1
  160.                                    SOURCE
  161.  
  162.      These are just some of the powerful options available to you. 
  163.      Yet, SOURCE is very easy to use.  SOURCE only needs to know the
  164.      name of the file(s) you wish to print and it does the rest.  You
  165.      can use SOURCE right out of the box (so to speak).  
  166.  
  167.      For example:
  168.  
  169.      C:\> SOURCE kludge.c
  170.  
  171.      This would print your file to the default printer using the built
  172.      in defaults. 
  173.  
  174.      You may configure each option to suit your needs.  See section 5
  175.      for a complete list of all the options.  Besides the printing
  176.      options, SOURCE is extremely flexible in its ability to work with
  177.      almost any printer and most programming languages. 
  178.  
  179.      To facilitate this dynamic environment, SOURCE consists of an
  180.      executable (SOURCE.EXE) and three support files:
  181.  
  182.           SOURCE.PRT:    Contains all the printer definitions.
  183.           SOURCE.CFG:    Contains all the default options used by
  184.                          SOURCE to print your files.
  185.           SOURCE.LNG:    Contains all the language and filename
  186.                          extension specifications needed for comment
  187.                          and keyword highlighting and block grouping.
  188.  
  189.      By default, all four files that make up SOURCE are named
  190.      "SOURCE.???" where '???' is "EXE", "PRT", "CFG", and "LNG".  If
  191.      you prefer to use a different name, such as "SRC", instead of
  192.      "SOURCE", simply rename all four files to the same prefix. 
  193.      Example:
  194.  
  195.           C:\>ren source.* src.*
  196.  
  197.      This will result in all four files having the "SRC.???" name
  198.      instead of "SOURCE.???".  Anywhere in this documentation you are
  199.      to execute "SOURCE", enter "SRC" instead.  The only advantage to
  200.      this is to save on typing "SOURCE" all the time, noe you enter
  201.      "SRC".  You could even change all the names to "S" if you really
  202.      like terse, UNIX-like command names.
  203.  
  204.      3    Quick Start
  205.  
  206.      Before running SOURCE for the first time (as if you have read
  207.      this far without having already done so), make sure you have
  208.      placed SOURCE.EXE, SOURCE.PRT, SOURCE.LNG, and SOURCE.CFG all
  209.      within the same directory.  You may also wish to include this
  210.      directory in your path so that you can run SOURCE from anywhere
  211.      on your system.  If you need more information on PATHs, see your
  212.      DOS manual.
  213.  
  214.      The simplest way of running SOURCE is to type:
  215.  
  216.           SOURCE filename.ext
  217.  
  218.                                    Page 2
  219.                                    SOURCE
  220.  
  221.      "SOURCE" is the program SOURCE and "filename.ext" is the name of
  222.      the file you are going to print.  You may press the [Esc] key
  223.      anytime while a file is printing to abort SOURCE and stop the
  224.      current file from printing.  Remember, most printers have buffers
  225.      and the printing will probably not stop immediately.
  226.  
  227.      The first time you run SOURCE you will be asked to select your
  228.      default printer.  This printer should be the one connected to
  229.      printer port one, "LPT1:".  If you are using a different port,
  230.      see section 6 for information on changing the printer port used
  231.      by SOURCE.  The list of printers initially supported by SOURCE
  232.      contains printers which should cover most of the printers in use. 
  233.      Pick the printer that closest matches the one you have.  
  234.  
  235.           Note:  If none of the printers are like yours, select
  236.           the "Generic" printer for now.  You will still be able
  237.           to print files, you just won't be able to take full
  238.           advantage of SOURCE's strengths.  Later on you'll see
  239.           how to modify SOURCE.PRT to take full advantage of your
  240.           printer.  See section 7 for more information on printer
  241.           definitions.
  242.  
  243.      Typing "SOURCE" at the prompt with no options will give you a few
  244.      lines about the general command line syntax.  You may type
  245.      "SOURCE -?" to see a few screens showing the command line syntax,
  246.      what each option is, and the options' current defaults.  After
  247.      the options, you will be shown what printers, languages, and
  248.      named configuration options are defined in the SOURCE.PRT,
  249.      SOURCE.LNG, and SOURCE.CFG files. 
  250.  
  251.      4    The SOURCE Command Line
  252.  
  253.      SOURCE is a command line utility.  To run SOURCE, type the name
  254.      of this program, SOURCE, followed by any options you wish to use
  255.      along with the filename(s) of the file(s) you wish to print.  The
  256.      command line syntax is as follows:
  257.  
  258.      SOURCE [-global options] filename.ext [-local options] . . .
  259.  
  260.      Objects in square brackets are optional and the ". . ." means you
  261.      may repeat as many filenames as you wish to have printed.
  262.  
  263.      The command line has two levels of options, global and local. 
  264.      Global options are configuration options that apply to all files
  265.      on the command line.  Local options only apply to the files that
  266.      immediately precede them. 
  267.  
  268.      4.1  Global Options
  269.  
  270.      Global options appear after the program name and before the first
  271.      filename.  These options apply to all the files specified on the
  272.      command line.  Global parameters are optional.  The syntax of
  273.      global options is a hyphen ( - ) followed by a one letter option
  274.      followed by any required parameters.  Options that take
  275.      parameters require that there be no space between the option and
  276.  
  277.                                    Page 3
  278.                                    SOURCE
  279.  
  280.      the parameter.  String parameters are slightly different.  A
  281.      space before the parameter is allowed.  String parameters may
  282.      also be enclosed in double quotes.  The quotes are required only
  283.      if the string contains spaces.  An example is:
  284.  
  285.           SOURCE -n -N4 -r com1
  286.  
  287.      The above example only contains global options (in this case,
  288.      four digit line numbers with output redirected to comm port one).
  289.      This example will not actually produce any output because no
  290.      files are specified yet.
  291.  
  292.      Options that you use frequently can be permanently preset within
  293.      the SOURCE.CFG file.  This way, you do not have to specify them
  294.      each time you use SOURCE.  See section 6 for a discussion on
  295.      setting global options as defaults. 
  296.  
  297.      4.2  Filenames
  298.  
  299.      After the global parameters, if any, you may specify the files
  300.      you wish to print.  In the simplest form, this would be a single
  301.      filename and its extension.
  302.  
  303.           SOURCE foobar.c
  304.  
  305.      Running this would cause SOURCE to print the file "foobar.c" from
  306.      the current directory.  To specify a file in another directory or
  307.      on another disk drive, use the full path name, as in the example
  308.      below:
  309.  
  310.           SOURCE c:\src\code.pas
  311.  
  312.      This would print the file "code.pas" found in the "c:\src\code"
  313.      directory despite your current working directory.
  314.  
  315.      There are three methods for printing multiple files.  The most
  316.      tiresome is to run SOURCE once for each file you need to print.
  317.  
  318.      The second option is to use wildcards when specifying the
  319.      filename.  The wildcards allowed are '*' and '?'.  These behave
  320.      exactly like the wildcards used by DOS commands (such as copy and
  321.      delete).  If you do not understand how wildcards work, please
  322.      refer to your DOS manual for more information.  An example of
  323.      wildcard use is:
  324.  
  325.           SOURCE *.c
  326.  
  327.      This would cause SOURCE to print all files in the current
  328.      directory that had the extension ".c".  Each file will be printed
  329.      separately, starting on page one, line one.
  330.  
  331.      The third method for printing multiple files is to enter more
  332.      than one name on the command line:
  333.  
  334.           SOURCE program.c data.txt
  335.  
  336.                                    Page 4
  337.                                    SOURCE
  338.  
  339.      This would cause SOURCE to print the two files, "program.c" and
  340.      "data.txt", from the current directory.  You may specify as many
  341.      files as the command line has room for.
  342.  
  343.      Any combination of these methods may used, for example:
  344.  
  345.           SOURCE *.c b:*.txt c:\proj\*.*
  346.  
  347.      This command line would print all 'C' files in the current
  348.      directory, all files with the extension ".txt" from the disk in
  349.      the B drive, and all files from the "proj" directory of the C
  350.      drive.
  351.  
  352.      4.3  Local Options
  353.  
  354.           In addition to the global options, you may specify "local"
  355.      options after each filename.  These local options override the
  356.      global options and only apply to the file they immediately follow
  357.      on the command line.  Local options are optional.  The syntax for
  358.      local options is identical to that of global options (see section
  359.      4.1).  Example:
  360.  
  361.           SOURCE -n hello.c goodbye.c -n-
  362.  
  363.      This command will cause SOURCE to print the file "hello.c" from
  364.      the current directory with line numbers and "goodbye.c" without
  365.      line numbers.  The global option "-n" causes line numbering to be
  366.      turned on for all files.  Specifying "-n-" after "goodbye.c"
  367.      tells SOURCE to turn line numbering off only for "goodbye.c" and
  368.      does not affect "hello.c".  Local options used after filenames
  369.      with wildcards will apply to all the files matched by the
  370.      wildcards:
  371.  
  372.           SOURCE *.c -b -c
  373.  
  374.      will print all 'C' files with block tracing and highlighted
  375.      comments turned on for each file.  This also shows that you may
  376.      specify more than one local option per file.  Of course, you do
  377.      not have to specify any local options if they are not needed.
  378.  
  379.      4.4  Full Command Line
  380.  
  381.      The command line for SOURCE is very flexible.  This flexibility
  382.      can also lead to some pretty long and complicated command lines. 
  383.      There are many ways to remedy this.  See section 6 for ways to
  384.      minimize the command line options.  The most complex command line
  385.      would be as follows:
  386.  
  387.           SOURCE -n -N4 file.pas -c -b *.c -h2 *.dat -n-
  388.  
  389.      This line contains global options and three file specifications
  390.      each giving their own local options.  You will not normally have
  391.      such lines, but the power is there to use.
  392.  
  393.      5    SOURCE Options
  394.  
  395.                                    Page 5
  396.                                    SOURCE
  397.  
  398.      What follows is a list of all the command line options that
  399.      SOURCE recognizes.  These options may be specified as global or
  400.      local options on the command line (unless indicated otherwise). 
  401.      They may also appear in the SOURCE.CFG file to define default
  402.      options for those options you wish to have in effect each time
  403.      you run SOURCE.  See section 6 for more on the SOURCE.CFG file. 
  404.      All options are case sensitive so do not run SOURCE with your
  405.      caps lock on.
  406.  
  407.      Conventions used below:
  408.  
  409.           [x]       Square brackets indicate optional items.  There
  410.                     may not be a space between the option and the
  411.                     parameter if specified.  Example:
  412.  
  413.                     n[-] may entered as n or n-.
  414.  
  415.           {x|y}     Curly braces containing a list of choices
  416.                     separated with a vertical bar indicate that you
  417.                     must select one of the options available for that
  418.                     item.  There may not be a space between the option
  419.                     and the chosen parameter.  Example:
  420.  
  421.                     a{a|o|r} allows aa, ao, or ar.
  422.  
  423.           "text"    Quotes indicate that you must enter a text string. 
  424.                     You do not have to type the double quotes unless
  425.                     the string contains spaces.  There may be a space
  426.                     between the option and the string.  Example:
  427.  
  428.                     z "list" allows:
  429.                          z.exe.obj      <== No spaces
  430.                          z".exe.obj"    <== Quotes optional, no spaces
  431.                          z".exe .obj"   <==Quotes required, spaces
  432.                          z .exe.obj
  433.                          z ".exe.obj"
  434.                          z ".exe .obj"
  435.  
  436.                     Not allowed would be:
  437.  
  438.                          z .exe .obj
  439.  
  440.                     because the parameter contains a space and must be
  441.                     enclosed in quotes.
  442.  
  443.           #         A pound symbol indicates that you must enter a
  444.                     number after the option.  Numbers may be made up
  445.                     of the 10 numeric digits and minus for negative
  446.                     numbers.  There may not be a space between the
  447.                     option and the number.  Example:
  448.  
  449.                     w# allows w1, w2, w3, etc.
  450.                     h# allows h-1, h2, h0, etc.
  451.  
  452.  
  453.  
  454.                                    Page 6
  455.                                    SOURCE
  456.  
  457.      Option         Description
  458.  
  459.      ?              Help.  The '?' option displays a quick command
  460.                     summary showing all the available options and
  461.                     their current defaults.  Running SOURCE with no
  462.                     options simply shows the command line syntax and
  463.                     the '-?' option.
  464.  
  465.      a{a|o|r}       Append/Overwrite.  The 'a' option describes the
  466.                     action SOURCE will take when redirecting the
  467.                     output to a file and the file already exists.  See
  468.                     the 'r' option for more on redirecting the output. 
  469.                     When the 'a' option is followed by an 'a', SOURCE
  470.                     will automatically append the new output to the
  471.                     previous contents of the file.  When followed by
  472.                     an 'o', SOURCE will automatically overwrite the
  473.                     old contents of the file and leave only the new
  474.                     output.  When followed by an 'r', SOURCE will
  475.                     interactively prompt you for the action to take. 
  476.                     You may specify 'append', 'overwrite', enter a
  477.                     different file, or quit SOURCE.  Default is 'ar',
  478.                     request.
  479.  
  480.      b[-]           Block Grouping.  The 'b' option sets whether block
  481.                     grouping is turned on or not.  The 'b' may be
  482.                     followed by '-'.  The 'b' option alone turns on
  483.                     block grouping, the minus turns it off.  For this
  484.                     option to work, SOURCE must know what language the
  485.                     file is written in.  This is done by using the
  486.                     filename extension as defined in the SOURCE.LNG
  487.                     file or the 'x' option may be used to force a
  488.                     specific language.  The lines used for block
  489.                     grouping may be drawn using either standard ASCII
  490.                     characters or the IBM line drawing characters. 
  491.                     See the 'g' option to set how the lines are drawn. 
  492.                     Default is 'b', block grouping on.
  493.  
  494.                     Below is some sample C code with block grouping
  495.                     turned on:
  496.  
  497.                          while (x < 10)
  498.                               ┌{
  499.                               │if (a < b)
  500.                               │    ┌{
  501.                               │    │puts("Hello");
  502.                               │    └}
  503.                               │else
  504.                               │    ┌{
  505.                               │    │puts("Goodbye");
  506.                               │    └}
  507.                               │x++;
  508.                               └}
  509.  
  510.  
  511.  
  512.  
  513.                                    Page 7
  514.                                    SOURCE
  515.  
  516.                     The above also assumes the 'g' option is on.  With
  517.                     the 'g' option off, the same code looks as
  518.                     follows:
  519.  
  520.                          while (x < 10)
  521.                               +{
  522.                               |if (a < b)
  523.                               |    +{
  524.                               |    |puts("Hello");
  525.                               |    +}
  526.                               |else
  527.                               |    +{
  528.                               |    |puts("Goodbye");
  529.                               |    +}
  530.                               |x++;
  531.                               +}
  532.  
  533.      B#             Banner.  The 'B' option allows you to print a
  534.                     banner before and/or after each file.  The banner
  535.                     contains the filename and extension in BIG
  536.                     letters.  The 'B' must be followed by a number
  537.                     from 0 to 3.  0 means no banner at all.  1 means a
  538.                     banner only before the file.  2 means a banner
  539.                     only after the file.  3 means a banner before and
  540.                     after the file.  Default is 'B3', print banner
  541.                     before and after.
  542.  
  543.      c[-]           Comment Highlighting.  The 'c' option sets whether
  544.                     comments within your programming code are
  545.                     highlighted or not.  The 'c' may be followed by
  546.                     '-'.  The 'c' option alone turns on highlighting,
  547.                     the minus turns off it off.  For this option to
  548.                     work, SOURCE must know what language the file is
  549.                     written in.  This is done by using the filename
  550.                     extension as defined in the SOURCE.LNG file or the
  551.                     'x' option may be used to force a specific
  552.                     language.  The highlighting method used is as
  553.                     defined in the SOURCE.PRT file for the selected
  554.                     pitch.  Default is 'c', highlighted comments on.
  555.  
  556.      d "printer"    Select Printer.  The 'd' option specifies which
  557.                     printer definition in the SOURCE.PRT file SOURCE
  558.                     should use when printing out files.  The 'd' must
  559.                     be followed by the printer name.  The name
  560.                     specified is not case sensitive.  If you only have
  561.                     one printer connected to your computer you will
  562.                     not need to use this option.
  563.  
  564.                     If you have multiple printers connected to
  565.                     different ports, you can specify this option at
  566.                     the command line when you are using a printer
  567.                     other than the default.  If this is the case, you
  568.                     will also need to use the 'r' option to specify
  569.                     the port the printer is connected to.  If you use
  570.                     different printers often, you may wish to define a
  571.  
  572.                                    Page 8
  573.                                    SOURCE
  574.  
  575.                     named configuration in the SOURCE.CFG file for
  576.                     each printer.  Then all you need to specify on the
  577.                     command line is the 'u' option.  See the 'u'
  578.                     option for more details on using named
  579.                     configurations.  The default printer is selected
  580.                     by the user the first time SOURCE is run or by
  581.                     modifying the SOURCE.PRT file.  See section 7 for
  582.                     more on SOURCE.PRT.
  583.  
  584.      e[-]           Escape Codes.  The 'e' option sets whether printer
  585.                     escape codes are output along with your text or
  586.                     not.  Normally you would want this left on so your
  587.                     printer will print the file properly.  Turning
  588.                     this option off would typically be used when
  589.                     redirecting output to a file when you would not
  590.                     want the escape codes embedded in the target file. 
  591.                     The 'e' may be followed by '-'.  The 'e' option
  592.                     alone causes the codes to be printed, the minus
  593.                     prevents the codes.  Default is 'e', codes
  594.                     printed.
  595.  
  596.      f#             Final Line.  The 'f' option allows you to specify
  597.                     the final line number of the file to print out. 
  598.                     This would be used to print only a desired block
  599.                     of code instead of having to print the entire
  600.                     file.  The 'f' must be followed by a positive
  601.                     number.  Specifying zero means the last physical
  602.                     line.  This option may not be used with the 'F' or
  603.                     'I' options unless set to zero.  Default is 'f0',
  604.                     print through last line.
  605.  
  606.      F#             Final Page.  The 'F' option allows you to specify
  607.                     the number of the final page of the file to print
  608.                     out.  This would be used to print only a block of
  609.                     code, or part of a page range, instead of printing
  610.                     out the entire file.  The 'F' must be followed by
  611.                     a positive number.  Specifying zero means the last
  612.                     physical page.  This option may not be used with
  613.                     the 'f' or 'i' options unless set to zero. 
  614.                     Default is 'F0', print through last page.
  615.  
  616.      g[-]           Graphics.  The 'g' option determines how the block
  617.                     group lines are printed (see option 'b' for more
  618.                     on block grouping).  When the option is on, the
  619.                     lines will be printed using the IBM line drawing
  620.                     characters.  With the option off, simple ASCII
  621.                     characters will be used.  If your printer cannot
  622.                     print the extended IBM character set then turn
  623.                     this off.  If your printer can print the lines
  624.                     then set this to on.  You may need to send a
  625.                     special code to your printer to select the IBM
  626.                     extended character set.  To do so, place the
  627.                     proper printer codes in the 'Init' record in the
  628.                     SOURCE.PRT file for your printer.  Default is
  629.                     'g-', print using standard ASCII.
  630.  
  631.                                    Page 9
  632.                                    SOURCE
  633.  
  634.      h#             Header Page.  The 'h' option is used to specify
  635.                     when to print the page header or footer.  The 'h'
  636.                     must be followed by a number.  Zero means no
  637.                     header or footer will be printed.  A one means to
  638.                     print the header only on the first page.  Any
  639.                     value of two or more will result in the header
  640.                     being printed on all pages.  To cause the header
  641.                     to be printed at the bottom of the page (now a
  642.                     footer), specify a negative number.  Negative one
  643.                     means to print a footer only on the first page. 
  644.                     Any number of -2 or less (-100 etc.) will cause
  645.                     the footer to be placed on all pages.  Page
  646.                     headers and footers are underlined and printed in
  647.                     10 pitch regardless of the pitch selected for the
  648.                     rest of the file.  The contents of the header are
  649.                     user definable by using the 'H' option.  Default
  650.                     is 'h2', header on all pages.
  651.  
  652.      H "header"     Header Definition.  The 'H' option is used to
  653.                     define the contents of the header or footer.  The
  654.                     definition consists of literal text and escape
  655.                     codes.  Since the definition will likely contain
  656.                     literal spaces, remember to enclose the definition
  657.                     within double quotes.  The escape commands are
  658.                     case sensitive and literal text will be shown as
  659.                     entered.  The escape sequences are described here:
  660.  
  661.                     &fn       Current filename and extension.  The
  662.                               filename is shown in uppercase.  No path
  663.                               is displayed.
  664.                     &fd#c     File creation date in specified format
  665.                               where # is 1 to 5 and c is the delimiter
  666.                               character ('/', ',', or '.').
  667.                     &ft#c     File creation time in specified format
  668.                               where # is 1 to 4 and c is the delimiter
  669.                               character (':', ',', or '.').
  670.                     &cd#c     Current date in specified format where #
  671.                               is 1 to 5 and c is the delimiter
  672.                               character ('/', ',', or '.').
  673.                     &ct#c     Current time in specified format where #
  674.                               is 1 to 4 and c is the delimiter
  675.                               character (':', ',', or '.').
  676.                     &pn#      Current page number in specified format
  677.                               where # is the number of digits the page
  678.                               number will take up.  The value must be
  679.                               in the range 1 to 9.  The page number
  680.                               will be left padded with spaces.  If you
  681.                               prefer zeros instead, precede the number
  682.                               with a zero.  Example:  &pn03.
  683.                     &li       Initial line number on page.
  684.                     &lf       Final line number on page.
  685.                     &h+       Turn on highlighting (using 10 high).
  686.                     &h-       Turn off highlighting (using 10 high).
  687.                     &jl       Left justify text.
  688.                     &jc       Center justify text.
  689.  
  690.                                   Page 10
  691.                                    SOURCE
  692.  
  693.                     &jr       Right justify text.
  694.                     &&        Prints a literal ampersand character.
  695.  
  696.                     Date formats:
  697.                     1)   mm dd yy       ex.  &fd1/     07/31/92
  698.                     2)   dd mm yy       ex.  &cd2.     31.07.92
  699.                     3)   yy mm dd       ex.  &cd3,     92,07,31
  700.                     4)   dd Mmm yy      ex.  &fd4-     31-Jul-92
  701.                     5)   Month dd  yyyy ex.  &cd5,     July 31, 1992
  702.  
  703.                     Time formats:
  704.                     1)   hh mm ss       ex.  &ct1:     15:45:21
  705.                     2)   hh mm          ex.  &ft2.     15.45
  706.                     3)   hh mm ss am    ex.  &ft3,     03,45,21 pm
  707.                     4)   hh mm am       ex.  &cd4:     03:45 pm
  708.  
  709.                     Example header definition:
  710.  
  711.                     '&h+File:&h-  &fn&jr&h+Page:&h-  &pn03'
  712.  
  713.                     This definition results in the following text:
  714.  
  715.                     File:  filename.ext                     Page:  001
  716.  
  717.                     where the text 'File:' and 'Page:' are
  718.                     highlighted, 'filename.ext' is the actual filename
  719.                     of the file, and the page number is right
  720.                     justified on the page.  Default is "File:  ",
  721.                     filename, file date, file time, "Printed:  ",
  722.                     date, time, "Page:  ", page number.
  723.  
  724.      i#             Initial Line.  The 'i' option allows you to
  725.                     specify the initial line number of the file to
  726.                     output.  This would be used to print only a block
  727.                     of code instead of the whole file.  The 'i' must
  728.                     be followed by a positive number.  Specifying zero
  729.                     means the first physical line.  It is likely that
  730.                     'i' would be used in conjunction with the 'f'
  731.                     option to print a specific range of text starting
  732.                     and finishing at the line numbers chosen.  This
  733.                     option may not be used with the 'F' or 'I' options
  734.                     unless set to zero.  Default is 'i0', the first
  735.                     line.
  736.  
  737.      I#             Initial Page.  The 'I' option allows you to
  738.                     specify the final page number of the file to
  739.                     output.  This would be used to print only a block
  740.                     of code instead of the whole file.  The 'I' must
  741.                     be followed by a positive number.  Specifying zero
  742.                     means the first physical page.  It is likely that
  743.                     'I' would be used in conjunction with the 'F'
  744.                     option to print a specific range of text starting
  745.                     and finishing at the page numbers chosen.  This
  746.                     option may not be used with the 'f' or 'i' options
  747.  
  748.  
  749.                                   Page 11
  750.                                    SOURCE
  751.  
  752.                     unless set to zero.  Default is 'I0', the first
  753.                     page.
  754.  
  755.      k[-]           Highlighted Keywords.  The 'k' option sets whether
  756.                     keywords within your programming code are
  757.                     highlighted or not.  The 'k' may be followed by
  758.                     '-'.  The 'k' option alone turns on highlighting,
  759.                     the minus turns it off.  Only those words listed
  760.                     in the "keyword" section of a language definition
  761.                     are highlighted.  For this option to work, SOURCE
  762.                     must know what language the file is written in. 
  763.                     This is done by using the filename extension as
  764.                     defined in the SOURCE.LNG file or the 'x' option
  765.                     may be used to force a specific language.  The
  766.                     highlighting method used is as defined in the
  767.                     SOURCE.PRT file for the selected pitch.  Default
  768.                     is 'k', highlighted keywords on.
  769.  
  770.      l{6|8}         Line Spacing.  The 'l' option specifies the number
  771.                     of lines per inch to print.  The 'l' must be
  772.                     followed by a 6 or an 8.  Ensure that the proper
  773.                     printer codes have been defined in the SOURCE.PRT
  774.                     file for the eight lines per inch option to work. 
  775.                     Default is 'l6', six lines per inch.
  776.  
  777.      m              Shareware Message.  The 'm' option causes a full
  778.                     screen message to display about registering
  779.                     SOURCE.  This command is only recognized if in
  780.                     SOURCE.CFG or as a global command line option.
  781.  
  782.      n[-]           Line Numbering.  The 'n' option is used to specify
  783.                     whether line numbers will be shown or not.  Line
  784.                     numbers are shown in the format specified in the
  785.                     'N' option.  The 'n' may be followed by '-'.  The
  786.                     'n' option alone turns on line numbering, the
  787.                     minus turns it off.  Default is 'n', line
  788.                     numbering on.
  789.  
  790.      N "beg#end"    Line Number Format.  The 'N' option specifies the
  791.                     size and format of line numbers.  The value of #
  792.                     must be a number between 1 and 9.  The terms "beg"
  793.                     and "end" represent literal text that may be shown
  794.                     before and after the line numbers.  For example,
  795.                     if you want four digit line numbers within square
  796.                     brackets, you would specify the option as 'N[4]'. 
  797.                     This would result in [   1], [   2], etc., being
  798.                     printed.  Another example would be if you wanted
  799.                     to specify 'N04:', which is the default, and this
  800.                     would result in the line numbers being printed as
  801.                     0001:, 0002:, and so on.  
  802.  
  803.                     The line numbers are left padded with spaces.  If
  804.                     you prefer the number to be left padded with
  805.                     zeros, precede the number with a zero.  For
  806.                     example:  'N4' will cause    1,    2, entering
  807.  
  808.                                   Page 12
  809.                                    SOURCE
  810.  
  811.                     'N04' will cause 0001, 0002, etc.  Both the
  812.                     'begin' and 'end' text are optional.  If there is
  813.                     no 'end' text, the source code will be adjacent to
  814.                     the line number.  To avoid this, you may wish to
  815.                     specify 'N"4 "'.  The space inside the double
  816.                     quotes will print after each line number.  
  817.  
  818.                     Specifying a value for the number of digits that
  819.                     is too small for the number of lines in the file
  820.                     to be printed will result in the line numbers
  821.                     wrapping around.  For example, if you specify N01
  822.                     and have 19 lines, line 10 would show up as 00,
  823.                     and line 11 would become 01.  This wrapping holds
  824.                     true for any size specified.  If your code
  825.                     typically has less than 1000 lines, specify 3 for
  826.                     the value of #, less than 10,000 lines, specify 4. 
  827.                     The default is 'N04:' which will produce 0001:,
  828.                     0002:, etc.
  829.  
  830.      o{l|p}         Page Orientation.  The 'o' option specifies the
  831.                     page orientation.  This will probably only work on
  832.                     laser printers since most dot matrix printers
  833.                     cannot print in landscape.  The 'o' must be
  834.                     followed by 'l' or 'p'.  The 'l' indicates
  835.                     landscape (sideways) printing and the 'p' is
  836.                     portrait (normal).  The landscape option requires
  837.                     that the 'landscape' field be filled in in the
  838.                     SOURCE.PRT file.  Default is 'op', portrait.
  839.  
  840.      p{p|e|c}       Pitch.  The 'p' option indicates the character
  841.                     pitch to print the files in.  The 'p' must be
  842.                     followed by 'p' (pica or 10 cpi), 'e' (elite or 12
  843.                     cpi), or 'c' (compressed using your printers
  844.                     compressed value, usually 15, 16.666, or 17).  If
  845.                     your printer allows large pitch sizes such as 5
  846.                     cpi, you could also use the compressed setting for
  847.                     this.  See section 7 for more on setting the
  848.                     compressed pitch value.  Default is 'pp', pica.
  849.  
  850.      q[-]           Page Count Query.  The 'q' option causes SOURCE to
  851.                     pre-scan each file and return the number of lines
  852.                     in the file and how many pages (excluding any
  853.                     banner pages) are required to print it based on
  854.                     all other print options.  You are then asked to
  855.                     confirm whether to print the file or not. 
  856.                     Pressing 'Y' or 'y' will cause the file to be
  857.                     printed.  Any other keystroke will prevent the
  858.                     file from being printed.  Pressing the [Esc] key
  859.                     will cause SOURCE to terminate.  The 'q' may be
  860.                     followed by '-'.  The 'q' option alone turns on
  861.                     the print statistics, the minus turns it off. 
  862.                     Turning on the 'q' option automatically turns on
  863.                     the 'v' (print verification) option.  Default is
  864.                     'q', show page count.
  865.  
  866.  
  867.                                   Page 13
  868.                                    SOURCE
  869.  
  870.      r "output"     Redirect.  The 'r' option allows you to redirect
  871.                     the output to a file or other device such as the
  872.                     screen or another printer port.  The 'r' must be
  873.                     followed by a filename or device name.  The file
  874.                     or device name is not case sensitive.  Example
  875.                     devices would be "LPT1", "PRN", or "COM2".  You
  876.                     may even specify "CON" to send the output to the
  877.                     screen.  When specifying a file, enter as much of
  878.                     the full path name as is needed.  You may specify
  879.                     another drive or directory.  No wildcards are
  880.                     allowed.  If the specified file already exists,
  881.                     SOURCE will act as specified by the 'a' option. 
  882.                     Default is 'r lpt1', output to printer port one.
  883.  
  884.      s{1|2}         Column Count.  The 's' option specifies the number
  885.                     of columns to print per page.  The 's' must be
  886.                     followed by a 1 or a 2.  It is recommended that
  887.                     compressed landscape printing be used with two
  888.                     columns.  Using two columns in 10 pitch, portrait
  889.                     print, leads to some difficult to read output. 
  890.                     Default is 's1', one column per page.
  891.  
  892.      S[-]           Show Column Separator.  The 'S' option is used in
  893.                     conjunction with the 's' option.  When you specify
  894.                     more than one column, the columns are separated by
  895.                     a vertical line.  The 'S' option allows you to
  896.                     tell SOURCE whether to display this vertical line
  897.                     or not.  The 'S' may be followed by '-'.  The 'S'
  898.                     alone turns the line on, the minus turns it off. 
  899.                     Default is 'S', line on.
  900.  
  901.      t#             Tab Stop Size.  The 't' option allows you to
  902.                     specify how many spaces a tab character should be
  903.                     printed as.  The 't' must be followed by a number
  904.                     from 0 to 8.  Specifying zero is equivalent to
  905.                     having all tabs removed from the file.  Default is
  906.                     't8', eight spaces per tab stop.
  907.  
  908.      u "name"       Use Named Configuration.  The 'u' option is used
  909.                     to specify a named configuration from within the
  910.                     SOURCE.CFG file.  See section 6.2 for more on
  911.                     named configurations.  The 'u' must be followed by
  912.                     a configuration name that has been defined in
  913.                     SOURCE.CFG.  The name is not case sensitive.  No
  914.                     default.
  915.  
  916.      v[-]           Print Verification.  The 'v' option is used to ask
  917.                     the user to confirm the printing of each file. 
  918.                     This would most likely be used in conjunction with
  919.                     wildcards in the filename.  For example, you want
  920.                     to print all but one or two files in a directory. 
  921.                     Specify "*.*/v" on the command line to select all
  922.                     the files.  SOURCE will then ask you to confirm
  923.                     the printing of each file.  Just press 'Y' or 'y'
  924.                     for the ones you want to print.  Any other key
  925.  
  926.                                   Page 14
  927.                                    SOURCE
  928.  
  929.                     stroke other than 'Y' or 'y' will be the same as
  930.                     no.  Pressing the [Esc] key will cause SOURCE to
  931.                     terminate.  The 'v' option is automatically turned
  932.                     on when the 'q' option is turned on.  The 'v'
  933.                     option may be followed by '-'.  The 'v' option
  934.                     alone turns on the print verify, the minus turns
  935.                     it off.  Default is 'v-', do not ask about each
  936.                     file.
  937.  
  938.      w#             Whitespace.  The 'w' option is used to specify the
  939.                     number of blank lines printed between the
  940.                     header/footer and the first/last line of text of
  941.                     the file on the page.  The 'w' must be followed by
  942.                     a value between 0 and 9.  Specifying zero will
  943.                     result in no blank space.  See the 'h' and 'H'
  944.                     options for more on user definable headers and
  945.                     footers.  Default is 'w1', one line.
  946.  
  947.      x "language"   Force Language.  The 'x' option allows you to tell
  948.                     SOURCE the language of a file regardless of its
  949.                     extension.  This option is useful only when using
  950.                     the 'b', 'c', or 'k' options (block grouping and
  951.                     comment or keyword highlighting).  The 'x' must be
  952.                     followed by a language name defined in SOURCE.LNG. 
  953.                     The name is not case sensitive.  For example, if
  954.                     you have a file with a 'bak' extension that really
  955.                     is a Pascal program, by following the file with
  956.                     the '-xPascal' option, SOURCE will treat the file
  957.                     as Pascal code so comments and blocks print
  958.                     correctly.  This assumes that there is a
  959.                     definition for 'Pascal' in the SOURCE.LNG file. 
  960.                     Default is none (use extension).
  961.  
  962.      y[-]           Sound.  The 'y' option determines whether the
  963.                     speaker will emit a bell or buzz sound when
  964.                     prompts or errors occur.  This option is not
  965.                     recognized as a local option.  The 'y' may be
  966.                     followed by '-'.  The 'y' option alone turns on
  967.                     sound, the minus turns them off.  Default is 'y-',
  968.                     sound off.
  969.  
  970.      z "list"       Ignore These Extensions.  The 'z' option is used
  971.                     to tell SOURCE what files to ignore during
  972.                     wildcard expansion.  For example, if you run
  973.                     SOURCE with "*.*", you will have a mess at your
  974.                     printer when it tries to print executables and
  975.                     object code!  You could specify the 'v' option
  976.                     each time and say no to files with ".exe" or
  977.                     ".obj" extensions, or you could use the 'z' option
  978.                     to tell SOURCE to automatically ignore the ".exe"
  979.                     and ".obj" extensions every time.  The syntax for
  980.                     the 'z' option is the list of extensions
  981.                     (including the period) between a pair of double
  982.                     quotes (if you place a space between each).  The
  983.                     list is not case sensitive.  To continue the
  984.  
  985.                                   Page 15
  986.                                    SOURCE
  987.  
  988.                     example, specify the 'z' option as 'z ".exe
  989.                     .obj"'.  You may specify as many extensions as you
  990.                     like as long as all are specified with one 'z'
  991.                     option.  Using two 'z' options will cause the
  992.                     first one to be ignored.  Default is 'z ".exe .com
  993.                     .sys .obj"'.
  994.  
  995.      6    SOURCE.CFG
  996.  
  997.      The SOURCE.CFG file is used to store groups of configuration
  998.      options that may be used by SOURCE.  Among these groups are a set
  999.      of default options.  These default options are seen by running
  1000.      SOURCE with the '-?' global option.  These default options, as
  1001.      initially defined, are actually the same defaults hard coded
  1002.      within SOURCE itself.
  1003.  
  1004.      6.1  SOURCE.CFG Location
  1005.  
  1006.      SOURCE.CFG is actually not needed.  If SOURCE can not find
  1007.      SOURCE.CFG, it will fall back on the built in defaults and
  1008.      continue to work fine.  SOURCE.CFG can be located in many
  1009.      different places.  By default, you should place a copy in the
  1010.      same directory as SOURCE.EXE (from now on referred to as the
  1011.      SOURCE directory).  With this setup, running SOURCE from any
  1012.      directory will cause SOURCE to use the defaults defined in
  1013.      SOURCE.CFG in the SOURCE directory.
  1014.  
  1015.      In addition to placing SOURCE.CFG in the SOURCE directory, you
  1016.      may also place other copies in any other directory you wish.  For
  1017.      example, you have a 'prog' directory on your hard disk.  If you
  1018.      place another copy of SOURCE.CFG in 'prog' and run SOURCE while
  1019.      your default directory is 'prog', SOURCE will use the SOURCE.CFG
  1020.      file in the 'prog' directory instead of the SOURCE directory.  By
  1021.      tailoring the SOURCE.CFG file to the files in 'prog', you can
  1022.      minimize the amount of command line options you need to specify. 
  1023.  
  1024.      The whole point to allowing this kind of flexibility is that you
  1025.      might be working on different projects that require different
  1026.      printing styles.  By placing tailored SOURCE.CFG files in the
  1027.      different directories, you can easily accomplish the diverse
  1028.      printing needs.
  1029.  
  1030.      6.2  Named Configuration Options
  1031.  
  1032.      If you have looked at the contents of SOURCE.CFG, you will notice
  1033.      that there seems to be more than just defaults defined in there. 
  1034.      SOURCE.CFG can actually store up to fifty sets of configuration
  1035.      options.  The first of which (as supplied) is the default
  1036.      options.  These different sets of options are referred to as
  1037.      named configuration options.  The supplied defaults are actually
  1038.      a named configuration option titled 'Default'.  SOURCE
  1039.      automatically looks for 'Default' and loads the options in if
  1040.      found.  In addition to the 'Default' setup, you may define 49
  1041.      more of your own design.  If for some reason you do not want the
  1042.      defaults loaded, rename 'Default' to something else.  You may
  1043.  
  1044.                                   Page 16
  1045.                                    SOURCE
  1046.  
  1047.      then refer to the defaults explicitly by using the 'u' option on
  1048.      the command line.  See section 5 for more information on
  1049.      selecting named configurations from the command line using the
  1050.      'u' option.
  1051.  
  1052.      The idea behind named configurations allows you to define a
  1053.      commonly used, but cumbersome, set of configuration options into
  1054.      a simple, single command line option.  A common use for them
  1055.      might be on a LAN where each user has their own favorite set of
  1056.      defaults.  The SOURCE.CFG file could contain one set for each
  1057.      user using their name or initials to name the options.  On the
  1058.      command line, simply specify "-u name" and all the options
  1059.      defined as "name" in SOURCE.CFG will be used.  Another
  1060.      circumstance could be to use named options when you are using
  1061.      SOURCE with multiple printers.  If you have "printer1" on "lpt1"
  1062.      and "printer2" on "com3", you could add two named configurations,
  1063.      "p1" and "p2".  "p1" would have '-d printer1 -r lpt1' and "p2"
  1064.      would have '-d printer2 -r com3'.  You could also add the 'g'
  1065.      option if one printer could print the IBM line drawing characters
  1066.      and one could not.  Typing 'source -u p1' at the command line is
  1067.      easier than 'source -d printer1 -r lpt1 -g'.  One other
  1068.      possibility would be if you wished to print source code in
  1069.      different languages in different formats.
  1070.  
  1071.      The named set of options may also contain a 'u' option.  This
  1072.      allows for nested definitions.  As an example, let's say you have
  1073.      two named configurations, "name1" and "name2".  If "name1"
  1074.      contains '-u name2', "name1" will pull in the options defined in
  1075.      "name2".  The result of using "name1" will be all the options in
  1076.      "name1" and all the options in "name2" being used.
  1077.  
  1078.      6.3  SOURCE.CFG Format
  1079.  
  1080.      The format of the SOURCE.CFG file is simple.  A named
  1081.      configuration begins with the key word "begin" followed by a
  1082.      name.  This name can contain any characters you can type at the
  1083.      DOS prompt.  I recommend descriptive names that indicate what the
  1084.      options represent.  Spaces are not allowed in the name.  The only
  1085.      limit is the full name must be 20 characters or less.  After the
  1086.      "begin" line, enter any set of options you like.  There are two
  1087.      ways of entering the options.  The easiest to read is to place
  1088.      one command per line.  Each command must be preceded by a hyphen. 
  1089.      Example:
  1090.  
  1091.      -t3
  1092.      -pp
  1093.  
  1094.      The second method allows more than one command per line.  This is
  1095.      identical to global options on the command line.  Simply separate
  1096.      the commands by at least one space.  Again, each command must be
  1097.      preceded by a hyphen.  Example:
  1098.  
  1099.      -l8  -s2
  1100.  
  1101.  
  1102.  
  1103.                                   Page 17
  1104.                                    SOURCE
  1105.  
  1106.      You may also enter the commands using any combination of the two
  1107.      methods.  Example:
  1108.  
  1109.      -q  -i5 -f100
  1110.      -z ".exe .obj .sys"
  1111.  
  1112.      After all options have been specified, enter the key word "end"
  1113.      on a line by itself to signal the end of the named definition. 
  1114.      You may define up to 20 named configurations.  A full definition
  1115.      would look as follows:
  1116.  
  1117.           begin Test
  1118.           -q -F2
  1119.           end
  1120.  
  1121.      6.4  Commenting SOURCE.CFG
  1122.  
  1123.      You may place comments in the SOURCE.CFG file by beginning a line
  1124.      with a semicolon ( ; ).  All text on that line will be ignored by
  1125.      SOURCE.  Do not place comments on lines with options.  The
  1126.      comment must go on a line by itself.  Example:
  1127.  
  1128.      ; This is a valid comment
  1129.      -b -c   ; This is not a valid comment - must be on own line
  1130.  
  1131.      6.5  Modifying SOURCE.CFG
  1132.  
  1133.      I recommend you modify the 'Default' named option in SOURCE.CFG
  1134.      to suit your most common needs.  This will result in having to
  1135.      specify little on the command line other than the filenames to
  1136.      print.  If you need to print a file slightly different one time,
  1137.      specify only the options required for the difference.  Add other
  1138.      named options for other commonly used configurations like those
  1139.      mentioned above.  This allows you to use very different print
  1140.      formats with minimal command line typing.
  1141.  
  1142.      One common change to the defaults would be to specify a different
  1143.      printer port.  Initially, SOURCE assumes printer port one, LPT1:. 
  1144.      If you are using a serial printer on a COM port or another
  1145.      printer port, change the default setting for the 'r' option. 
  1146.      Replace the word 'lpt1' with 'com1' or 'lpt2' or whatever is
  1147.      appropriate for you.
  1148.  
  1149.      7    SOURCE.PRT
  1150.  
  1151.      This file allows you to define any printer configuration you may
  1152.      have.  Only one copy of SOURCE.PRT is used and this must reside
  1153.      in the same directory as SOURCE.EXE.  This file is required and
  1154.      SOURCE will not run if not found.  SOURCE.PRT can contain printer
  1155.      definitions for up to 20 different printers, though I doubt you
  1156.      will ever need that many.  Once you define your printer, you can
  1157.      delete all other definitions if you like.  However, if you have
  1158.      more than one printer, leave all the necessary definitions.
  1159.  
  1160.      7.1  Default Printer
  1161.  
  1162.                                   Page 18
  1163.                                    SOURCE
  1164.  
  1165.      If you have more than one printer defined, you must make one the
  1166.      default.  This can be done automatically the first time you run
  1167.      SOURCE.  If you would like to change that default at a later
  1168.      time, you must manually edit the SOURCE.PRT file.  To make a
  1169.      printer the default, place the keyword "default" after the
  1170.      printer name.  Example:  'begin HPLJII+ default'.  If you specify
  1171.      more than one default, the last one will be chosen.  Remember you
  1172.      can use the 'd' option to select a printer other than the default
  1173.      if needed.  If you only have one printer defined in SOURCE.PRT
  1174.      you do not need to specify the keyword "default".
  1175.  
  1176.      7.2  SOURCE.PRT Format
  1177.  
  1178.      Similar to SOURCE.CFG, each definition in SOURCE.PRT begins with
  1179.      the keyword 'begin' followed by a name.  The name may be made up
  1180.      of any characters you can type at the DOS prompt up to 20
  1181.      characters.  The name may not contain spaces.  The printer
  1182.      definition ends with the keyword 'end' on a line by itself.  In
  1183.      between are the lines specifying your printer setup.  The syntax
  1184.      of each line is a field name, a colon, and the value you enter
  1185.      for that field.  Each line can contain only one field.  
  1186.  
  1187.      For those fields that require a printer escape sequence, you can
  1188.      enter the codes as literal characters or by entering the decimal
  1189.      value in square brackets.  You may also enter the code as a
  1190.      combination of both.  For example, the reset code on a Hewlett
  1191.      Packard Laser Jet is [Esc]E.  You might not be able to enter a
  1192.      literal escape character in your editor.  The solution is to use
  1193.      the decimal value in square brackets.  [Esc] is ASCII value 27. 
  1194.      The 'E' can be entered literally.  The two codes together would
  1195.      be entered into the reset field as:  [27]E.  Since the square
  1196.      brackets are being used as special characters by SOURCE, you may
  1197.      not enter them as literal characters in the printer code.  If
  1198.      your code needs the characters '[' or ']', enter the decimal
  1199.      value in square brackets.  The left bracket '[' becomes [91] and
  1200.      the right bracket ']' becomes [93].  The value inside the bracket
  1201.      must be a decimal number from 1 to 255.
  1202.  
  1203.      A list of the fields and a description of each is as follows:
  1204.  
  1205.      page width:    This field is the physical page width in inches. 
  1206.                     This will typically be 8.5 for standard letter
  1207.                     sized paper.  If you are using wide computer
  1208.                     paper, this could be 14.  This field is required.
  1209.  
  1210.      page length:   This field is the physical page length in inches. 
  1211.                     Normal letter size paper would be 11.  Legal size
  1212.                     paper would be 14.  This field is required.
  1213.  
  1214.      top margin:    Indicates the top margin in inches.  The first
  1215.                     printed line will be placed this far from the top
  1216.                     of the page.  A standard half inch margin would be
  1217.                     .5.  This value must be greater than or equal to
  1218.                     the top edge.  This field is required.
  1219.  
  1220.  
  1221.                                   Page 19
  1222.                                    SOURCE
  1223.  
  1224.      bottom margin: Indicates the bottom margin in inches.  The last
  1225.                     line printed will be this far from the bottom of
  1226.                     the page.  This value must be greater than or
  1227.                     equal to the bottom edge.  This field is required.
  1228.  
  1229.      left margin:   This is the left margin in inches.  The left most
  1230.                     characters will be this far from the left edge of
  1231.                     the paper.  This value must be greater than or
  1232.                     equal to the left edge.  This field is required.
  1233.  
  1234.      right margin:  This is the right margin in inches.  The right
  1235.                     most characters will be this far from the right
  1236.                     edge of the paper.  This value must be greater
  1237.                     than or equal to the right edge.  This field is
  1238.                     required.
  1239.  
  1240.      top edge:      The top edge is used to define the physical
  1241.                     limitation of the printer to print at the top of
  1242.                     the page.  Laser printers typically are set with a
  1243.                     half inch limit at the top.  By entering .5 here,
  1244.                     the margin specified in 'top margin' will come out
  1245.                     correctly.  This field is required.
  1246.  
  1247.      bottom edge:   The bottom edge is used to define the physical
  1248.                     limitation of the printer to print at the bottom
  1249.                     of the page.  Laser printers typically are set
  1250.                     with a half inch limit at the bottom.  By entering
  1251.                     .5 here, the margin specified in 'bottom margin'
  1252.                     will come out correctly.  This field is required.
  1253.  
  1254.      left edge:     The left edge is used to define the physical
  1255.                     limitation of the printer to print at the left
  1256.                     edge of the page.  Laser printers typically cannot
  1257.                     print on the first quarter inch of the left edge. 
  1258.                     By entering .25 here, the margin specified in
  1259.                     'left margin' will come out correctly.  The exact
  1260.                     value entered may be slightly different.  Try .2
  1261.                     or .3.  Experiment with the proper value to set
  1262.                     your printer up correctly.  This field is
  1263.                     required.
  1264.  
  1265.      right edge:    The right edge is used to define the physical
  1266.                     limitation of the printer to print at the right
  1267.                     edge of the page.  Laser printers typically cannot
  1268.                     print on the last quarter inch of the right edge. 
  1269.                     By entering .25 here, the margin specified in
  1270.                     'right margin' will come out correctly.  The exact
  1271.                     value entered may be slightly different.  Try .2
  1272.                     or .3.  Experiment with the proper value to set
  1273.                     your printer up correctly.  This field is
  1274.                     required.
  1275.  
  1276.      10 pitch:      This field is used to enter the escape sequence
  1277.                     used by your printer to print text at ten
  1278.  
  1279.  
  1280.                                   Page 20
  1281.                                    SOURCE
  1282.  
  1283.                     characters per inch.  Enter the sequence exactly
  1284.                     as shown in your printer manual including case.
  1285.  
  1286.      12 pitch:      This field is used to enter the escape sequence
  1287.                     used by your printer to print text at 12
  1288.                     characters per inch.  Enter the sequence exactly
  1289.                     as shown in your printer manual including case. 
  1290.                     This field is required to use this feature.
  1291.  
  1292.      compressed:    This field is used to enter the escape sequence
  1293.                     used by your printer to print text in compressed
  1294.                     mode.  This is usually 15, 16.66, or 17.  You may
  1295.                     even enter the code for enlarged print such as 5
  1296.                     cpi.  Enter the sequence exactly as shown in your
  1297.                     printer manual including case.  This field is
  1298.                     required to use this feature.
  1299.  
  1300.      comp size:     This field is used to specify the characters per
  1301.                     inch your printer will print while in compressed
  1302.                     mode.  Typically this value will be 15, 16.666, or
  1303.                     17 (or even 5 for enlarged print).  This field is
  1304.                     required to print in compressed mode.
  1305.  
  1306.      underline on:  This is the printer escape sequence for turning
  1307.                     underlining on.  This is used only by the page
  1308.                     header/footer.  This field is required to use this
  1309.                     feature.  If you do not want the header
  1310.                     underlined, leave this field blank.
  1311.  
  1312.      underline off: This is the printer escape sequence for turning
  1313.                     underlining off.  This is used only by the page
  1314.                     header/footer.  This field is required to use this
  1315.                     feature.  If you do not want the header
  1316.                     underlined, leave this field blank.
  1317.  
  1318.      10 high on:    This is the printer escape sequence used to print
  1319.                     comments when the 'c' option is used and the 'p'
  1320.                     option was set to 10.  This code could be almost
  1321.                     anything your printer can do.  Examples are bold,
  1322.                     underline, and italic.  DO NOT use a code that
  1323.                     prints in a different size font like expanded or
  1324.                     double height.  This will cause the file to print
  1325.                     incorrectly.  Whatever code is used must not
  1326.                     change the current print size.  This field is
  1327.                     required to use this feature.
  1328.  
  1329.      10 high off:   This is the printer escape sequence used to turn
  1330.                     off the code used by '10 high on'.  This field is
  1331.                     required to use this feature.
  1332.  
  1333.      12 high on:    This is the printer escape sequence used to print
  1334.                     comments when the 'c' option is used and the 'p'
  1335.                     option was set to 12.  This code could be almost
  1336.                     anything your printer can do.  Examples are bold,
  1337.                     underline, and italic.  DO NOT use a code that
  1338.  
  1339.                                   Page 21
  1340.                                    SOURCE
  1341.  
  1342.                     prints in a different size font like expanded or
  1343.                     double height.  This will cause the file to print
  1344.                     incorrectly.  What ever code is used must not
  1345.                     change the current print size.  This field is
  1346.                     required to use this feature.
  1347.  
  1348.      12 high off:   This is the printer escape sequence used to turn
  1349.                     off the code used by '12 high on'.  This field is
  1350.                     required to use this feature.
  1351.  
  1352.      comp high on:  This is the printer escape sequence used to print
  1353.                     comments when the 'c' option is used and the 'p'
  1354.                     option was set to your compressed value.  This
  1355.                     code could be almost anything your printer can do. 
  1356.                     Examples are bold, underline, and italic.  DO NOT
  1357.                     use a code that prints in a different size font
  1358.                     like expanded or double height.  This will cause
  1359.                     the file to print incorrectly.  What ever code is
  1360.                     used must not change the current print size.  This
  1361.                     field is required to use this feature.
  1362.  
  1363.      comp high off: This is the printer escape sequence used to turn
  1364.                     off the code used by 'comp high on'.  This field
  1365.                     is required to use this feature.
  1366.  
  1367.      init:          This code is sent to the printer before the first
  1368.                     file is printed.  This should contain all required
  1369.                     printer initialization codes to setup your
  1370.                     printer.  Examples would be the initialize printer
  1371.                     code, character set selection (not pitch size),
  1372.                     and print quality (draft, NLQ, etc.).  There
  1373.                     should be nothing in here for selecting pitch or
  1374.                     page orientation since this will be done using the
  1375.                     other codes specific to those settings.  This is
  1376.                     not required.
  1377.  
  1378.      reset:         This code is sent to the printer after the last
  1379.                     file is sent.  This can be blank.  This may be
  1380.                     used to place the printer back into the mode it
  1381.                     was prior to the "Init" code being sent.  This is
  1382.                     not required.
  1383.  
  1384.      portrait:      This is the code sent to the printer to set the
  1385.                     paper orientation to portrait - the usual way the
  1386.                     page is set.  This only applies to laser printers
  1387.                     since dot matrix printers cannot print any other
  1388.                     way using straight text printing (as opposed to
  1389.                     graphics).  This must be filled in if your printer
  1390.                     supports portrait and landscape printing.
  1391.  
  1392.      landscape:     This is the code sent to the printer to set the
  1393.                     paper orientation to landscape - sideways
  1394.                     printing.  This only applies to laser printers
  1395.                     since dot matrix printers cannot print landscape
  1396.  
  1397.  
  1398.                                   Page 22
  1399.                                    SOURCE
  1400.  
  1401.                     without using graphics.  This must be filled in to
  1402.                     make use of the landscape printing feature.
  1403.  
  1404.      6 lpi:         This code is used to print the file at six lines
  1405.                     per inch.  This is the usual default for all
  1406.                     printers.  If your printer does not support eight
  1407.                     lines per inch than you may leave this blank,
  1408.                     otherwise this is required.
  1409.  
  1410.      8 lpi:         This code is used to print the file at eight lines
  1411.                     per inch.  If your printer does not support eight
  1412.                     lines per inch than you may leave this blank,
  1413.                     otherwise this is required to use the feature.
  1414.  
  1415.      There are many relationships between the values placed in the
  1416.      above fields.  The sum of the top and bottom margins must be less
  1417.      than the page length.  The sum of the left and right margins must
  1418.      be less than the page width.  All margins must be greater than or
  1419.      equal to their corresponding edge.  If you only have 10 pitch
  1420.      printing, you may leave all three pitch codes blank.  If you can
  1421.      only print at six lines per inch, you may leave both the six and
  1422.      eight lines per inch codes blank.
  1423.  
  1424.      Certain combinations of print options do not work together on
  1425.      some printers.  For example, Hewlett Packard laser jet printers
  1426.      will not print bold or italic while in compressed print.  This is
  1427.      why there are separate highlight codes for the different pitch
  1428.      sizes.  This allows you to specify bold or italic for 10 and 12
  1429.      pitch and underlining for compressed printing.
  1430.  
  1431.      7.3  Modifying Your Printer
  1432.  
  1433.      As delivered, the SOURCE.PRT file has only a few basic printers
  1434.      within it.  These may not fit your printer completely if at all. 
  1435.      To take full advantage of your printer's abilities, you can edit
  1436.      SOURCE.PRT by placing an entry for your printer within it.  To do
  1437.      so, either reuse an existing entry that is similar to your
  1438.      printer or copy the 'Generic' definition and rename the copy to
  1439.      match your printer name.  Once you have this done, open up your
  1440.      printer's reference manual to the section that describes all the
  1441.      features and their associated escape sequences.  Enter the codes
  1442.      you need into the proper fields and you will be ready to go.  It
  1443.      may take some trial and error to get everything perfect, but it
  1444.      can be done.
  1445.  
  1446.      8    SOURCE.LNG
  1447.  
  1448.      SOURCE.LNG contains the definitions for the language support
  1449.      features of SOURCE.  The two options are comment highlighting and
  1450.      code block grouping or tracing.  The SOURCE.LNG file details what
  1451.      makes a comment, a literal string and character, and what
  1452.      represents a code block.
  1453.  
  1454.      8.1  SOURCE.LNG Location
  1455.  
  1456.  
  1457.                                   Page 23
  1458.                                    SOURCE
  1459.  
  1460.      SOURCE.LNG is not a required file.  If SOURCE can not find
  1461.      SOURCE.LNG, it will ignore the use of the b and c options and
  1462.      continue to work fine.  SOURCE.LNG can actually be located in
  1463.      many different places.  By default, you should place a copy in
  1464.      the same directory as SOURCE.EXE (from now on referred to as the
  1465.      SOURCE directory).  With this setup, running SOURCE from any
  1466.      directory will cause SOURCE to use the definitions in the
  1467.      SOURCE.LNG in the SOURCE directory.
  1468.  
  1469.      In addition to placing SOURCE.LNG in the SOURCE directory, you
  1470.      may also place other copies in any other directory you wish.  For
  1471.      example, you have a 'prog' directory on your hard disk.  If you
  1472.      place another copy of SOURCE.LNG in 'prog' and run SOURCE while
  1473.      your default directory is 'prog', SOURCE will use the SOURCE.LNG
  1474.      file in the 'prog' directory instead of the SOURCE directory.  By
  1475.      tailoring the SOURCE.LNG file to the files in 'prog', you can
  1476.      work with different dialects of the same language.
  1477.  
  1478.      The whole point to allowing this kind of flexibility is that you
  1479.      might be working on different projects that require different
  1480.      language definitions.  By placing tailored SOURCE.LNG files in
  1481.      the different directories, you can easily accomplish the diverse
  1482.      needs.
  1483.  
  1484.      8.2  SOURCE.LNG Format
  1485.  
  1486.      The format of SOURCE.LNG is similar to the other support files. 
  1487.      You begin a language definition with the keyword 'beginlang'
  1488.      followed first by the name of the language and then a list of
  1489.      filename extensions associated with the language.  The language
  1490.      name can be any characters you can type at the DOS prompt.  The
  1491.      name cannot contain spaces and may be up to 20 characters long. 
  1492.      The list of extensions are used to tell SOURCE to treat any file
  1493.      with the given extension as a file of that language.  An example
  1494.      would be:  'beginlang C .c .h'.  This defines a language called
  1495.      "C".  Any file with the extension ".c" or ".h" would be treated
  1496.      as a "C" file.  You may specify up to 10 extensions per language.
  1497.  
  1498.      The second line of the definition is a list of legal characters
  1499.      that may be found in identifiers and keywords.  Identifiers
  1500.      include variables and labels within a program.  These characters
  1501.      are used to tell SOURCE how to discern between to words in a
  1502.      program.  Most languages allow letter and numbers.  Some also
  1503.      allow some puncuation like underscores.  See your language
  1504.      reference.  It should detail the allowable characters.  The list
  1505.      of characters must be contiguous and on one line with no spaces. 
  1506.      You only need to specify either lower or upper case letters, not
  1507.      both.
  1508.  
  1509.      The language definition is completed with the keyword 'endlang'
  1510.      on a line by itself.  This may be followed by the keyword 'case'
  1511.      to indicate that the language is case sensitive and/or 'part' to
  1512.      indicate that keywords only need to match partially.  This is
  1513.      explained in detail below.  Any other keywords, or none at all,
  1514.      indicate that the language is case independent and keywords
  1515.  
  1516.                                   Page 24
  1517.                                    SOURCE
  1518.  
  1519.      require a full match.  Example:  'endlang case' terminates the
  1520.      language definition and specifies case dependency.  'endlang' or
  1521.      'endlang nocase' indicate the end of a case independent language.
  1522.  
  1523.      The SOURCE.LNG file may contain up to twenty language
  1524.      definitions.  You only need those for which you have use, so feel
  1525.      free to delete unneeded languages from the supplied SOURCE.LNG
  1526.      file.
  1527.  
  1528.      8.3  Commenting SOURCE.LNG
  1529.  
  1530.      You may place comments in the SOURCE.LNG file by beginning a line
  1531.      with a semicolon (;).  All text on that line will be ignored by
  1532.      SOURCE.  Do not place comments within a language definition, only
  1533.      before the 'beginlang' line or after the 'endlang' line.
  1534.  
  1535.      8.4  Defining Language Specific Features
  1536.  
  1537.      8.4.1  Comments
  1538.  
  1539.      After the 'beginlang' line, you specify how comments are defined. 
  1540.      This begins with the line ':comment:'.  After the ':comment:'
  1541.      line, you specify three lines.  The first line is the begin
  1542.      comment command, the second is the end comment command.  The
  1543.      third line contains a number from zero to 80.  This number
  1544.      indicates the column that the begin comment command must begin
  1545.      in.  A zero indicates that the comment may begin in any column. 
  1546.      An example for the 'C' language would be:
  1547.  
  1548.           :comment:
  1549.           /*                       <== Begin comment
  1550.           */                       <== End comment
  1551.           0                        <== Comment may be in any column
  1552.  
  1553.      You may specify more than one comment.  For example, Turbo Pascal
  1554.      allows the following:
  1555.  
  1556.           :comment:
  1557.           {
  1558.           }
  1559.           0
  1560.           (*
  1561.           *)
  1562.           0
  1563.  
  1564.      For languages such as BASIC where comments are terminated by the
  1565.      end of line, specify the begin command on the first line and
  1566.      leave the second line blank.  Example:
  1567.  
  1568.           :comment:
  1569.           REM
  1570.                                    <== This is a blank line
  1571.           0
  1572.  
  1573.  
  1574.  
  1575.                                   Page 25
  1576.                                    SOURCE
  1577.  
  1578.      One of the few examples of specifying a non-zero column number
  1579.      would be for FORTRAN.  Comments in FORTRAN are specified by
  1580.      placing a 'C' in column one.  The definition for this would be:
  1581.  
  1582.           :comment:
  1583.           C                        <== Comments begin with a C
  1584.                                    <== Terminated by end-of-line
  1585.           1                        <== C must be in column one
  1586.  
  1587.      Since blank lines are interpreted as part of the syntax, you may
  1588.      not leave blank lines within a language definition in the
  1589.      SOURCE.LNG file unless it is required as above.  You may define
  1590.      up to 7 comment marker pairs per language.
  1591.  
  1592.      8.4.2  String and Character Literals
  1593.  
  1594.      After defining the comments, you define what makes up literal
  1595.      strings and characters.  This is done just like comments.  You
  1596.      begin with the line ':string:'.  After this line, you enter two
  1597.      lines per string or character.  The first line contains the
  1598.      delimiter used to begin and end a literal string or character
  1599.      (typically a single or double quote).  The second line specifies
  1600.      an escape sequence.  This is the sequence (usually one character)
  1601.      used to allow the delimiter character to be used literally within
  1602.      a string or as a character.  'C' is a good example of this. 
  1603.      Strings are set in double quotes.  To place a double quote within
  1604.      a string, you must precede the double quote with a backslash ("He
  1605.      said \"Hello\"").  The definition would be as follows:
  1606.  
  1607.           :string:
  1608.           "                        <== String Delimiter
  1609.           \                        <== Escape Sequence
  1610.  
  1611.      Characters in 'C' are similar.  Literal characters are defined by
  1612.      single quotes.  To assign a literal single quote in 'C', you
  1613.      precede the literal quote with a backslash ('\'').  The
  1614.      definition would be:
  1615.  
  1616.           :string:
  1617.           '                        <== Character Delimiter
  1618.           \                        <== Escape Sequence
  1619.  
  1620.      For languages such as Pascal where strings are defined by single
  1621.      quotes and a literal single quote is specified by two single
  1622.      quotes ('It''s mine'), simply place the following definition:
  1623.  
  1624.           :string:
  1625.           '                        <== String & Character Delimiter
  1626.           '                        <== Escape Sequence
  1627.  
  1628.      For languages such as BASIC which do not allow you to place the
  1629.      string delimiter within the string, you would leave the second
  1630.      line blank.
  1631.  
  1632.  
  1633.  
  1634.                                   Page 26
  1635.                                    SOURCE
  1636.  
  1637.      You may declare up to five pairs of delimiters per language.  The
  1638.      full string definition for 'C' would be:
  1639.  
  1640.           :string:
  1641.           "
  1642.           \
  1643.           '
  1644.           \
  1645.  
  1646.      8.4.3  Blocks
  1647.  
  1648.      After specifying the string definition, you must define what
  1649.      commands make up blocks.  The keywords defined here are used with
  1650.      the 'b' option to allow block grouping to work.  The definition
  1651.      begins with the keyword ':block:'.  Following are two lines per
  1652.      block.  The first line is the begin block command and the second
  1653.      line is the end block command.  For 'C', this is easy because all
  1654.      blocks are marked the same.  Blocks begin with a left curly brace
  1655.      and end with a right curly brace.  The definition would be:
  1656.  
  1657.           :block:
  1658.           {
  1659.           }
  1660.  
  1661.      For languages like Pascal, you may have numerous block pairs. 
  1662.      Example:
  1663.  
  1664.           :block:
  1665.           begin
  1666.           end
  1667.           record
  1668.           end
  1669.           case
  1670.           end
  1671.           repeat
  1672.           until
  1673.  
  1674.      For most languages, the keyword used to define a block must be
  1675.      entered in its entirety.  You can't specify 
  1676.  
  1677.           beg
  1678.           ...
  1679.           end
  1680.  
  1681.      in Pascal for example.  You must enter the whole keyword.  A
  1682.      counter example to this is the dBase programming language.  dBase
  1683.      allows you to enter only the first four letters of each keyword. 
  1684.      A 'while' loop could be entered as:
  1685.  
  1686.           do while                           do whil
  1687.           ...                 or             ...
  1688.           enddo                              endd
  1689.  
  1690.      For SOURCE to work with a language such as this, you must specify
  1691.      the "part" or "partial" keyword after the "endlang" keyword at
  1692.  
  1693.                                   Page 27
  1694.                                    SOURCE
  1695.  
  1696.      the end of the language definition followed by the number of
  1697.      characters needed.  If SOURCE finds the 'part' keyword at the end
  1698.      of a definition, comment and block keywords entered in SOURCE.LNG
  1699.      for that language will be treated as the minimal text that must
  1700.      be entered to be a valid keyword in the program.  If the 'part'
  1701.      keyword is not specified, SOURCE will treat the comment and block
  1702.      keywords in SOURCE.LNG as the full keyword that must be found in
  1703.      the file being printed.
  1704.  
  1705.      8.4.4  Keywords
  1706.  
  1707.      After specifying the block definition, you must define those
  1708.      keywords that you would like highlighted when the 'k' option is
  1709.      active.  The definition begins with the keyword ':keyword:' and
  1710.      is followed by one keyword per line.  The keywords may have
  1711.      spaces in them.  The words may be entered in any order.  You may
  1712.      enter any words you like.  The idea is to highlight reserved
  1713.      words so you can pick out variables and function names easier. 
  1714.      If you have certain functions or other words you would like
  1715.      highlighted, simply add them to the list.  A partial list for 'C'
  1716.      would be:
  1717.  
  1718.           :keyword:
  1719.           auto
  1720.           break
  1721.           case
  1722.           char
  1723.           const
  1724.           continue
  1725.           . . .
  1726.  
  1727.      If the language is case dependant, ensure the keywords are
  1728.      entered in the proper case.  If case independant, the entered
  1729.      case is irrelevant.  If the language supports partial keyword
  1730.      matching (like dBASE), you must enter the shortest portion of the
  1731.      keyword that the language recognizes just as you did for the
  1732.      'block' section.  SOURCE will highlight the entire keyword found
  1733.      in the program.  For example, if you have the keyword 'endt'
  1734.      (short for 'endtext' in dBASE) in the language definition, and
  1735.      SOURCE finds the 'endtext' in the program, the entire 'endtext'
  1736.      will be highlighted.
  1737.  
  1738.      It is important that the keywords entered only contain those
  1739.      characters entered on the second line of language definition.  If
  1740.      other characters are used, the keyword may not be highlighted
  1741.      properly.  You may define up to 400 keywords per language.
  1742.  
  1743.      8.4.5  Complete Definition
  1744.  
  1745.      Now that you have seen each part of the definition, here is a
  1746.      full definition as it would appear in SOURCE.LNG for 'C'.
  1747.  
  1748.           beginlang C .c .h
  1749.           abcdefghijklmnopqrstuvwxyz0123456789_   <== Valid characters
  1750.           :comment:
  1751.  
  1752.                                   Page 28
  1753.                                    SOURCE
  1754.  
  1755.           /*
  1756.           */
  1757.           0                        <== Any column
  1758.           :string:
  1759.           "
  1760.           \
  1761.           '
  1762.           \
  1763.           :block:
  1764.           {
  1765.           }
  1766.           :keyword:
  1767.           auto
  1768.           break
  1769.           case
  1770.           char
  1771.           const
  1772.           continue
  1773.           . . .          <== There are more, but you get the point
  1774.           endlang case
  1775.  
  1776.      For dBase, the full definition would be:
  1777.  
  1778.           beginlang dbase .prg
  1779.           :comment:
  1780.           *
  1781.                                    <== Comments end with end-of-line
  1782.           0                        <== Begin in any column
  1783.           &&
  1784.                                    <== Comments end with end-of-line
  1785.           0
  1786.           note
  1787.                                    <== Comments end with end-of-line
  1788.           0
  1789.           :string:
  1790.           "
  1791.                                    <== No double quotes in strings
  1792.           :block:
  1793.           do case
  1794.           endc                     <== Minimum required
  1795.           do whil                  <== Minimum required
  1796.           endd                     <== Minimum required
  1797.           if
  1798.           endi                     <== Minimum required
  1799.           text
  1800.           endt                     <== Minimum required
  1801.           :keyword:
  1802.           acce
  1803.           addi
  1804.           alia
  1805.           all
  1806.           all like
  1807.           appe
  1808.           appe from
  1809.           . . .          <== There are more, but you get the point
  1810.  
  1811.                                   Page 29
  1812.                                    SOURCE
  1813.  
  1814.           endlang part 4
  1815.  
  1816.      8.5  General Points
  1817.  
  1818.      Some points to keep in mind when defining a language.  If you
  1819.      have more than one language with the same extension, SOURCE will
  1820.      choose the first.  To override this, you can use the 'x' option
  1821.      on the command line to explicitly choose the language you really
  1822.      need.  
  1823.  
  1824.      While defining a comment or a block, you may not define two or
  1825.      more pairs that begin with the same keyword, regardless of the
  1826.      ending keyword.  However, you may define any number of pairs that
  1827.      have the same ending keyword as long as the beginning keywords
  1828.      are unique.  This should never be a problem because two blocks
  1829.      with the same beginning keyword would lead to a rather ambiguous
  1830.      syntax.
  1831.  
  1832.      When defining blocks for the language, be careful with statements
  1833.      using variable syntax.  A good example is the 'IF' statement in
  1834.      some BASICs.  The syntax can be:
  1835.  
  1836.      1)   IF condition THEN statement [ELSE statement]
  1837.  
  1838.           or
  1839.  
  1840.      2)   IF condition THEN
  1841.             statements
  1842.           [ELSE
  1843.             statements]
  1844.           ENDIF
  1845.  
  1846.      DO NOT specify in your block definitions 'IF' - 'ENDIF' because
  1847.      if SOURCE encounters the first syntax, the line will never
  1848.      terminate because it will not find the 'ENDIF'.  Unfortunately,
  1849.      there is no solution to this.  The only downside is that you will
  1850.      not get trace lines for your IF statements.  If you know for a
  1851.      fact that you did not use the first syntax, then go ahead and
  1852.      specify the 'IF' - 'ENDIF' block.
  1853.  
  1854.      9    Network Support
  1855.  
  1856.      SOURCE currently has limited network support.  The support
  1857.      offered at this time allows you to define an environment variable
  1858.      called "USER".  SOURCE will determine the value of "USER" and
  1859.      load the named configuration, from SOURCE.CFG, of the same name. 
  1860.      This configuration option will be used as the default set of
  1861.      options instead of "Default".
  1862.  
  1863.      This setup allows SOURCE to be installed on a network server. 
  1864.      Each user would add a line like:
  1865.  
  1866.      set USER=<name>
  1867.  
  1868.  
  1869.  
  1870.                                   Page 30
  1871.                                    SOURCE
  1872.  
  1873.      to their "autoexec.bat" file.  The <name> would be a unique
  1874.      identifier for that person.  This could be a last name or
  1875.      initials.  The SOURCE.CFG file in the SOURCE directory would
  1876.      contain a named configuration for each user on the network.
  1877.  
  1878.      Care must be taken to limit write access to the common SOURCE.CFG
  1879.      file.  You may wish to allow only the network supervisor to
  1880.      update this file to prevent problems with each user adding their
  1881.      options.  Data will get lost if two people try editing at the
  1882.      same time.
  1883.  
  1884.      If SOURCE cannot find a named configuration with the same name as
  1885.      the value of "USER", SOURCE will fall back on the "Default" named
  1886.      configuration.
  1887.  
  1888.      Having the environment variable defined is slightly different
  1889.      from using the '-u <name>' command line option.  When using the
  1890.      environment variable, the matching named configuration is used in
  1891.      place of the default named configuration.  When using the 'u'
  1892.      option, the matching named configuration is loaded in addition to
  1893.      the default named configuration.
  1894.  
  1895.      10   Definition of Shareware
  1896.  
  1897.      Shareware distribution gives users a chance to try software
  1898.      before buying it.  If you try a Shareware program and continue
  1899.      using it, you are expected to register.
  1900.  
  1901.      Copyright laws apply to both Shareware and commercial software,
  1902.      and the copyright holder retains all rights, with a few specific
  1903.      exceptions as stated below.  Shareware authors are accomplished
  1904.      programmers, just like commercial authors, and the programs are
  1905.      of comparable quality.  (In both cases, there are good programs
  1906.      and bad ones!)  The main difference is in the method of
  1907.      distribution.  The author specifically grants the right to copy
  1908.      and distribute the software, either to all and sundry or to a
  1909.      specific group.  For example, some authors require written
  1910.      permission before a commercial disk vendor may copy their
  1911.      Shareware.
  1912.  
  1913.      Shareware is a distribution method, not a type of software.  You
  1914.      should find software that suits your needs and pocketbook,
  1915.      whether it's commercial or Shareware.  The Shareware system makes
  1916.      fitting your needs easier, because you can try before you buy.  
  1917.      And because the overhead is low, prices are low also.  Shareware
  1918.      has the ultimate money-back guarantee -- if you don't use the
  1919.      product, you don't pay for it.
  1920.  
  1921.      11   Disclaimer - Agreement For Trying SOURCE
  1922.  
  1923.      Users of SOURCE must accept this disclaimer of warranty:
  1924.  
  1925.           "SOURCE is supplied as is.  The author disclaims all
  1926.           warranties, expressed or implied, including, without
  1927.           limitation, the warranties of merchantability and of
  1928.  
  1929.                                   Page 31
  1930.                                    SOURCE
  1931.  
  1932.           fitness for any purpose.  The author assumes no
  1933.           liability for damages, direct or consequential, which
  1934.           may result from the use of SOURCE."
  1935.  
  1936.      SOURCE is a "shareware program" and is provided at no charge to
  1937.      the user for evaluation.  Feel free to share it with your
  1938.      friends, but please do not give it away altered or as part of
  1939.      another system.  The essence of "user-supported" software is to
  1940.      provide personal computer users with quality software without
  1941.      high prices, and yet to provide incentive for programmers to
  1942.      continue to develop new products.  If you find this program
  1943.      useful and find that you are using SOURCE and continue to use
  1944.      SOURCE after a reasonable trial period, you must make a
  1945.      registration payment to Rick Maddy.  
  1946.  
  1947.      The registration fee will license one copy for use on any one
  1948.      computer at any one time.  You must treat this software just like
  1949.      a book.  An example is that this software may be used by any
  1950.      number of people and may be freely moved from one computer
  1951.      location to another, so long as there is no possibility of it
  1952.      being used at one location while it's being used at another. 
  1953.      Just as a book cannot be read by two different persons at the
  1954.      same time.  Site-License arrangements may be made by contacting
  1955.      Rick Maddy.
  1956.  
  1957.      You are encouraged to pass a copy of SOURCE along to your friends
  1958.      for evaluation.  Please encourage them to register their copy if
  1959.      they find that they can use it.  All registered users will
  1960.      receive a copy of the latest version of SOURCE in your name,
  1961.      printed documentation, a quick reference card, upgrade notices
  1962.      and discounts, and customer support.
  1963.  
  1964.      12   Registering
  1965.  
  1966.      You may use SOURCE for a free 30 day trial period.  If you
  1967.      continue to use SOURCE after the 30 day trial period, you are
  1968.      required to register your copy of SOURCE.
  1969.  
  1970.      When you register SOURCE you will be sent a disk with the latest
  1971.      version of SOURCE in your name, printed documentation, a quick
  1972.      reference card, upgrade notices and discounts, and customer
  1973.      support.  The cost of registration is $20.00.
  1974.  
  1975.      You can order directly from Rick Maddy by completing the
  1976.      registration form and mailing it and a check to:
  1977.  
  1978.                          Rick Maddy
  1979.                          7111 Kurth Lane
  1980.                          Seabrook, MD 20706
  1981.  
  1982.      The registration form is at the end of this document and in a
  1983.      separate file called register.txt.
  1984.  
  1985.  
  1986.  
  1987.  
  1988.                                   Page 32
  1989.                                    SOURCE
  1990.  
  1991.      If you have any questions or comments, feel free to call Rick
  1992.      Maddy at (301) 794-8466 or leave a mail message on Compuserve at
  1993.      76460,1601.
  1994.  
  1995.      13   Future Enhancements
  1996.  
  1997.      I have a few ideas for making SOURCE an even better utility. 
  1998.      Here is a brief list:
  1999.  
  2000.           - Full screen interface to replace command line.
  2001.           - Full screen programs for editing printer, language, and
  2002.             configuration files.
  2003.           - Windows 3.1 version.
  2004.           - Optional log file of all printed files.
  2005.           - Expanded file selection (i.e. date range).
  2006.           - Print files in sorted order by name, size, date, etc.
  2007.           - Expanded network/multi-user support.
  2008.  
  2009.      I am open to any comments or suggestions for improvements or
  2010.      additions to SOURCE.  Please drop me a line.
  2011.  
  2012.      14   Acknowledgements
  2013.  
  2014.      I would like to thank the following people for all there help in
  2015.      finishing this program:
  2016.  
  2017.           - Scott Sidel for his help with making this program easier
  2018.             to use and writing this documentation.
  2019.  
  2020.           - Robert Harvey and William Moussiaux for beta testing
  2021.             SOURCE.
  2022.  
  2023.           - All the kind people who answered my questions about OS/2
  2024.             on Compuserve.
  2025.  
  2026.  
  2027.  
  2028.  
  2029.  
  2030.  
  2031.  
  2032.  
  2033.  
  2034.  
  2035.  
  2036.  
  2037.  
  2038.  
  2039.  
  2040.  
  2041.  
  2042.  
  2043.  
  2044.  
  2045.  
  2046.  
  2047.                                   Page 33
  2048.                             SOURCE REGISTRATION
  2049.  
  2050.      Remit to:                From:
  2051.  
  2052.      Rick Maddy               Name:__________________________________
  2053.      7111 Kurth Lane          Company:_______________________________
  2054.      Seabrook, Md 20706       Street:________________________________
  2055.      (301) 794-8466           City:__________________________________
  2056.                               State/Zip:_____________________________
  2057.      Compuserve Id:           Phone:_________________________________
  2058.      76460, 1601
  2059.                               Name to register in:
  2060.                               (Up to 40 characters)
  2061.  
  2062.                               _______________________________________
  2063.  
  2064.  
  2065.      Qty:                          Unit Price     Total:
  2066.  
  2067.      ____ SOURCE Software          $20.00         ________
  2068.  
  2069.  
  2070.      Specify Disk Size:
  2071.  
  2072.      _____  5 1/4"       _____  3 1/2"
  2073.  
  2074.  
  2075.      Current Version of Source:______________________________________
  2076.